package com.atguigu.tingshu.album.service;

import com.atguigu.tingshu.model.album.TrackInfo;
import com.atguigu.tingshu.query.album.TrackInfoQuery;
import com.atguigu.tingshu.vo.album.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface TrackInfoService extends IService<TrackInfo> {
    /**
     * 新增声音
     * @author Petrichor
     * @date 2023/12/22 18:33
     * @param trackInfoVo  声音信息
     * @return NULL
     **/
    void saveTrackInfo(TrackInfoVo trackInfoVo);
    /**
     * 获取当前用户声音分页列表
     * @author Petrichor
     * @date 2023/12/22 19:48
     * @param pageNo 当前页面
     * @param limit 每页记录数
     * @param trackInfoQuery   声音信息  赋值有 当前用户id
     * @return 当前用户声音分页列表
     **/
    IPage<TrackListVo> findUserTrackPage(Long pageNo, Long limit, TrackInfoQuery trackInfoQuery);
    /**
     * 修改声音
     * @author Petrichor
     * @date 2023/12/22 21:09
     * @param  id 专辑id
     * @param  trackInfoVo 声音信息
     **/
    void updateTrackInfo(Long id, TrackInfoVo trackInfoVo);
    /**
     * 删除声音信息
     * @author Petrichor
     * @date 2023/12/22 21:26
     * @param id 专辑id
     **/
    void removeTrackInfo(Long id);
    /**
     * 根据专辑id获取声音列表
     * @author Petrichor
     * @date 2024/1/1 14:25
     * @param albumId 专辑id
     * @param pageNo 页数
     * @param limit 当前页的条数
     * @return AlbumTrackListVo 用户专辑声音列表信息
     **/
    IPage<AlbumTrackListVo> findAlbumTrackPage(Long albumId, Long pageNo, Long limit);
    /**
     * 更新声音播放量
     * @author Petrichor
     * @date 2024/1/1 16:30
     * @param trackStatMqVo 内部有需要更新的
     **/
    void updateStatNum(TrackStatMqVo trackStatMqVo);
    /**
     * 统计声音信息接口
     * @author Petrichor
     * @date 2024/1/1 16:42
     * @param trackId 声音id
     * @return TrackStatVo 用户声音统计信息
     **/
    TrackStatVo getTrackStatVoByTrackId(Long trackId);
    /**
     * 获取用户声音分集购买支付列表
     * @author Petrichor
     * @date 2024/1/7 21:46
     * @param trackId 声音id
     * @return TrackPayVo 声音分集购买信息列表
     **/
    List<TrackPayVo> findUserTrackPaidList(Long trackId);
    /**
     * 批量获取下单付费声音列表
     * @author Petrichor
     * @date 2024/1/7 22:28
     * @param trackId 声音id
     * @param trackCount 购买集数
     * @return 购买的声音列表
     **/
    List<TrackInfo> findPaidTrackInfoList(Long trackId, Integer trackCount);
}
